package Thread;

import java.util.Random;

//累加操作的类
/*class SumOperator {
    //定义奇偶数
    Long oddSum = 0L;//奇数
    Long evenSum = 0L;//偶数

    //方法求出所有奇数和偶数元素的和
    public void addEvenSum(int num) {
        //求偶数的和
        evenSum += num;
    }

    public void addOddSum(int num) {
        //求奇数的和
        oddSum += num;
    }

    //方法返回奇偶数的和以及奇偶数相加的和
    public Long result() {
        System.out.println("奇数和：" + oddSum);
        System.out.println("偶数和：" + evenSum);
        return oddSum + evenSum;//两数相加
    }
}

public class ThreadDemo1 {

    public static void main(String[] args) throws InterruptedException{
        // 1.给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
        // 2.实现代码, 能够创建两个线程, 对这个数组的所有元素求和.
        // 3.其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和.
        // 4.最终再汇总两个和, 进行相加
        // 5.记录程序的执行时间.

        //记录开始的时间
        Long start = System.currentTimeMillis();

        //定义数组 - 随机数生成元素
        int total = 1000_0000;
        int[] arr = new int[total];//长度是一千万
        //调研random生成随机数
        Random random = new Random();
        for (int i = 0; i < total; i++) {
           int num = random.nextInt(100) + 1;//就是1~100
            arr[i] = num;
        }

        //定义两个线程计算数组奇数元素和偶数元素的和
        /*
        * 线程1 计算奇数
        * 线程2 计算偶数
        * */
        //构造操作类
        /*SumOperator sumOperator = new SumOperator();

        //定义线程
        Thread t1 = new Thread(() -> {
            //计算奇数的和
            for (int i = 1; i < total; i += 2) {
                sumOperator.addOddSum(arr[i]);
            }
        });

        Thread t2 = new Thread(() -> {
            //计算偶数的和
            for (int i = 0; i < total; i += 2) {
                sumOperator.addEvenSum(arr[i]);
            }
        });

        //启动线程
        t1.start();
        t2.start();

        //等待线程
        t1.join();
        t2.join();

        //结束时间
        Long end = System.currentTimeMillis();

        //输出结果
        System.out.println("奇偶和：" + sumOperator.result());
        //输出计算时间
        System.out.println("计算时间：" + (end - start) + "ms");
    }
}*/

//实现累加操作的类
class SumOperator {
    //定义奇偶数
    Long oddSum = 0L;//奇数
    Long evenSum = 0L;//偶数

    //计算奇数和的方法
    public void addOddSum (int num) {
        oddSum += num;
    }

    //计算偶数和的方法
    public void addEvenSum (int num) {
        evenSum += num;
    }

    //计算奇偶数和的方法
    public Long result() {
        System.out.println("奇数和：" + oddSum);
        System.out.println("奇数和：" + evenSum);
        //返回奇偶数的和
        return oddSum + evenSum;
    }
}
public class ThreadDemo1 {

    public static void main(String[] args) throws InterruptedException{
        //记录开始的时间
        long start = System.currentTimeMillis();

        //定义一千万的数组
        int total = 1000_0000;
        int[] array = new int[total];
        //调用Random 生成随机数
        Random random = new Random();
        for (int i = 0; i < total; i++) {
            int num = random.nextInt(100) + 1; // 1~100的随机数
            array[i] = num;
        }

        //构造操作类
        SumOperator sumOperator = new SumOperator();

        //定义两个线程计算奇数和偶数元素的和
        //先计算奇数
        Thread t1 = new Thread(() -> {
            for (int i = 1; i < total; i += 2) {
                sumOperator.addOddSum(array[i]);
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < total; i += 2) {
                sumOperator.addEvenSum(array[i]);
            }
        });

        //启动线程
        t1.start();
        t2.start();

        //等待线程
        t1.join();
        t2.join();

        //计算结束的时间
        Long end = System.currentTimeMillis();

        //输出奇偶数的和和计算的时间
        System.out.println("奇数偶数和：" + sumOperator.result());
        System.out.println("时间：" + (end - start) + "ms");
    }
}
